package com.zp.self.module.level_4_算法练习.数据结构.二叉树;

/**
 * @author  ZengPeng
 **/
public class 力扣_112_路径总和 {
    public static void main(String[] args) {
        TreeNode root = TreeNode.initRoot();
        System.out.println( new 力扣_112_路径总和().hasPathSum(root,38));
        System.out.println( new 力扣_112_路径总和().hasPathSum(null,0));
    }

    /**
     * 题目：给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。
     * 判断该树中是否存在 根节点到叶子节点 的路径，这条路径上所有节点值相加等于目标和 targetSum 。
     * 如果存在，返回 true ；否则，返回 false 。
     * 叶子节点 是指没有子节点的节点。
     *
     * 分析：
     *      递归
     *      1.单步操作：每次递归的目标值减去父节点值
     *      2.终止条件 ：左右节点都为空 || targetSum ==0
     *      3.返回值  左节点 || 右节点
     *
     * 边界值注意：
     * 1.root 根节点为空
     * 2.必须计算到子叶节点
     **/
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root ==null) return  false;
        targetSum = targetSum - root.val;
        if(targetSum== 0 && root.right==null && root.left==null) return true;
        return hasPathSum(root.left,targetSum) || hasPathSum(root.right,targetSum);
    }

}
